#include <bits/stdc++.h>
using namespace std;
int read()
{
    int x=0,f=1;
    char ch=getchar();
    while(ch<'0' || ch>'9')
    {
        if(ch=='-')
            f=-1;
        ch=getchar();
    }
    while(ch>='0' && ch<='9')
    {
        x=x*10+ch-'0';
        ch=getchar();
    }
    return x*f;
}
void write(int x)
{
    if(x<0)
    {
        x=-x;
        putchar('-');
    }
    if(x>9)
        write(x/10);
    putchar(x%10+'0');
}
struct node{
    int zh,gs,kz;
}g[100005];
int n,l;
int a[100005];
bool cmp(int a,int b)
{
    return a>b;
}
int main()
{
    freopen("duel.in","r",stdin);
    freopen("duel.out","w",stdout);
    n=read();
    int ans=n;
    for(int i=1;i<=n;i++)
        a[i]=read();
    sort(a+1,a+n+1,cmp);
    int t=a[1],ll=1;
    for(int i=2;i<=n;i++)
    {
        if(a[i]!=t)
        {
            g[++l]={t,ll,ll};
            t=a[i];
            ll=0;
        }
        ll++;
    }
    g[++l]={t,ll,ll};/*
    for(int i=1;i<=l;i++)
        cout<<g[i].zh<<' '<<g[i].gs<<endl;*/
    int s=l-1,i=l;
    while(i>0 && s>0)
    {
        while(g[i].gs<=0)
            i--;
        while(g[s].kz<=0)
            s--;
        while(g[i].zh>=g[s].zh)
            s--;
        if(i<=0 || s<=0)
            break;
        while(g[i].gs>=g[s].kz)
        {

            if(s<1)
                    break;
        //cout<<"ke "<<i<<' '<<s<<' '<<g[i].gs<<' '<<g[s].kz<<' '<<ans<<endl;
            ans-=g[s].kz;
            g[i].gs-=g[s].kz;
            g[s].kz=0;
            s--;
        }
        //cout<<"buke "<<i<<' '<<s<<' '<<g[i].gs<<' '<<g[s].kz<<' '<<ans<<endl;
        while(g[i].zh>=g[s].zh)
            s--;
        if(i<=0 || s<=0)
            break;
        ans-=g[i].gs;
        g[s].kz-=g[i].gs;
        g[i].gs=0;
        i--;
    }
    cout<<ans;
    return 0;
}
